// 二分查找法
// 对于一个非负实数 x，其平方根一定在区间[0, x] 内（当 x < 1 时，平方根在[x, 1] 内）。
// 通过不断缩小查找区间，逐步逼近平方根的精确值。


function mySqrt(x) {
  if (x < 0) {
    throw new Error("不能对负数求平方根");
  }
  if (x === 0 || x === 1) {
    return x;
  }
  let left = 0;
  let right = x;
  // 精度控制
  const precision = 1e-7;
  while (right - left > precision) {
    const mid = (left + right) / 2;
    if (mid * mid > x) {
      right = mid;
    } else {
      left = mid;
    }
  }
  return (left + right) / 2;
}

// 测试示例
const num = 9;
console.log(mySqrt(num));    